
package logica.pessoa;

import logica.util.Data;
import logica.util.Endereco;
import criptografia.Encriptador;


/**
 * Classe Usuario
 * Os usuario sao formado por todos os adminitradores do sistema
 *
 * @author Jose Arthur Morais (Tabira)
 * @since 15/10/2010
 *
 */
public class Usuario extends PessoaFisica{
   
    private String login;
    private String senha;
    private int matricula;
    private static int proximaMatricula = 0;
    private Encriptador encriptador;
   
    /**
     * Controi um objeto usuario do sistema
     *
     * @param String nome
     * @param String telefone
     * @param String email
     * @param Endereco endereco
     * @param String cpf
     * @param String rg
     * @param Data  dataDeNascimento
     * @param String naturalidade
     * @param String login
     * @param String senha
     * @param String matricula
     *
     * @throws Exception Ver excessao das super classes
     * @throws Exception login deve ter mais de 5 caracteres
     * @throws Exception senha deve ter mais de 5 caracteres
     * @throws Exception matricula tem que conter exclusivamente 7 digitos
     *
     * @see {@link Pessoa} {@link PessoaFisica} {@link Gerente} {@link Funcionario}  {@link PessoaJuridica}
     */
    public Usuario(String nome, String telefone, String email, Endereco endereco, String cpf,String rg, Data dataDeNascimento, String naturalidade,String login,String senha) throws Exception{
       
        super ( nome, telefone, email, endereco, cpf, rg,  dataDeNascimento,  naturalidade);
       
        setLogin(login);
        setSenha(senha);
        
        this.matricula = ++proximaMatricula;
   
    }
   
    /**
     * Consulta login do usuario
     * @return String login
     */
    public String getLogin() {
        return login;
    }
   
    /**
     * Muda o login
     * @param String login
     * @throws Exception login deve ter mais de 5 caracteres
     * @throws Exception login deve ser individual
     */
    public void setLogin(String login) throws Exception {
        if (login == null || login.length() < 6 )
            throw new Exception ("login deve ter mais de 5 caracteres");
       
       
        this.login = login;
    }
   
    /**
     * Consulta senha
     * @return String senha
     */
    public String getSenha() {
        return senha;
    }
   
    /**
     * Muda a senha
     * @param String senha
     * @throws Exception senha deve ter mais de 5 caracteres
     */
    public void setSenha(String senha) throws Exception {
        if (senha == null || senha.length() < 6)
            throw new Exception ("senha deve ter mais de 5 caracteres");
       
        encriptador = new Encriptador();
        this.senha = encriptador.geraHashParaSenha(senha);
    }
   
    /**
     * consulta matricula
     * @return String matricula
     */
    public int getMatricula() {
        return matricula;
    }


    /**
     * Verifica a igualdade entre usuarios
     *
     * @return boolean true se os Usuarios possuem mesma matricula
     */
    @Override public boolean equals(Object object){
        if (! (object instanceof Usuario))
            return false;
       
        Usuario outro = (Usuario) object;
        
        return this.getMatricula() == outro.getMatricula();
    }
   
    /**
     * Representa o usuario em forma de string
     *
     * @return String usuario
     */
    @Override public String toString(){
        return "Nome: " + getNome() + "\nMatricula: " + matricula;
    }


}